import java.util.Arrays;

/**
 * 面试题61：扑克牌中的顺子
 */
public class Offer_61 {
    /**
     * 排序遍历
     * <p>
     * 时间复杂度：O(nlogn) = O(5log5) = O(1)
     * <p>
     * 空间复杂度：O(logn) = O(log5) = O(1)
     */
    public boolean isStraight(int[] nums) {
        // 大小王的个数
        int joker = 0;
        // 数组排序
        Arrays.sort(nums);
        for (int i = 0; i < 4; i++) {
            if (nums[i] == 0) {
                // 统计大小王数量
                joker++;
            } else if (nums[i] == nums[i + 1]) {
                // 若有重复，提前返回 false
                return false;
            }
        }
        // 最大牌 - 最小牌 < 5 则可构成顺子
        return nums[4] - nums[joker] < 5;
    }
}
